# Datei experiment_1.py, abgeleitet von ble_adv_1d.py # TTGO als Peripheral/Slave # Benutze nRF als Central/Master # Während des Advertising (d. h. bis zum Connecting) blinkt LED1 an Pin 27 # Nach dem Aufbau der Verbindung gibt der TTGO auf dem Terminal "Central Connected" aus und die LED1 leuchtet dauerhaft # Nach dem Lösen der Verbindung gibt der TTGO auf dem Terminal "Central disconnected" aus und die LED1 blinkt wieder. from machine import Pin, Timer from time import sleep_ms # Periphal-Klasse BLE definieren: import ubluetooth from micropython import const _IRQ_CENTRAL_CONNECT = const(1) _IRQ_CENTRAL_DISCONNECT = const(2) class BLE(): def __init__(self, name): self.name = name self.ble = ubluetooth.BLE() self.ble.active(True) self.led1 = Pin(27, Pin.OUT) self.timer1 = Timer(0) self.timer2 = Timer(1) self.disconnected() self.ble.irq(self.ble_irq) self.advertiser() self.getaddress() def connected(self): self.timer1.deinit() # timer1 deactivated self.timer2.deinit() # timer2 deactivated def disconnected(self): self.timer1.init(period=1000, mode=Timer.PERIODIC, callback=lambda t: self.led1(1)) # led1(1) short for led1.value(1) sleep_ms(200) self.timer2.init(period=1000, mode=Timer.PERIODIC, callback=lambda t: self.led1(0)) def ble_irq(self, event, data): if event == _IRQ_CENTRAL_CONNECT: # A central has connected to this peripheral print('connected') conn_handle, addr_type, addr = data print('address_type:', addr_type,'; address: ', [hex(n) for n in list(bytes(addr))]) print() self.connected() # LED1 on self.led1(1) elif event == _IRQ_CENTRAL_DISCONNECT: # A central has disconnected from this peripheral print('disconnected') conn_handle, addr_type, addr = data print('address_type:', addr_type,'; address: ', [hex(n) for n in list(bytes(addr))]) print() self.advertiser() self.disconnected() # LED1 blinking... def advertiser(self): name = bytes(self.name, 'UTF-8') self.ble.gap_advertise(60000, bytearray('\x02\x01\x06') + bytearray((len(name) + 1, 0x09)) + name) # 60000 us advertising interval def getaddress(self): mac = self.ble.config('mac') mac_type, addr = mac print('ESP32:') print('mac_type:', mac_type,'; address: ', [hex(n) for n in list(bytes(addr))]) print() # Hauptprogramm: print('Advertising gestartet und läuft (Interrupt-gesteuert) weiter,\nauch wenn das Prompt-Zeichen >>> erscheint...\n') print('Dieser Vorgang lässt sich mit Hilfe des Reset-Buttons beenden.\n') ble = BLE("ESP32") # jetzt sind BLE-Interrupts aktiviert